The present embodiments relate to a managing apparatus and a managing method for managing a software development and maintenance system.
In order to handle complex software systems, an entity of a software system may be separated into a plurality of elements of a code base (e.g., source code). This simplifies the development and the maintenance of the complex software system. When a user wants to work on the code base, the required files of the code base are copied from a central storage system to a local user terminal. After the user has finished his work, the modified parts of the code base are transferred back to the central storage system, and a check-in of the modified parts of the code base is performed on the central storage system. In order to enable a tracking of the software development and to monitor the modifications, the received parts of the code base may be stored in addition to the previous version of the respective parts or sections of the code base. Thus, the amendments may be identified, and a previous version may be recovered if the current amendments would lead to a serious error in the code base. In a conventional configuration management system (CMS), code parts are stored on the basis of Directories and/or Files.
However, the users of such a complex software system are confronted with a huge amount of mainly unstructured information when maintaining and evolving the software system. Thus, the developmental quality of large software systems during development tends to decrease over time and, for example, after the first release. Currently, there are several options to analyze the system in order to identify the quality of the evolving software system and to get hints about critical issues. For example, code analysis tools allow detecting code errors on a programmatic level. Architecture analysis tools allow an analysis of the development quality of a software system like the existence of a layered structure of architecture modules. These tools also enable verification of a hierarchic and a cyclic dependency structure of architecture modules and design constructs.
Further to this, there are mechanisms and tools in place to collect customer feedback like bug reports and change requests, which are related to the functional capabilities and operational qualities like robustness or responsiveness of the software system. However, there are no mechanisms to analyze and relate these two sources of information on developmental quality and functional/operational qualities in order to get new conclusions as how and where it is worth to focus the further work on the development and maintenance of the software system.
Conventional code analysis tools only allow identifying coding pitfalls like memory leaks, buffer overruns or potential race conditions. In addition, architecture analysis tools allow identifying a non-hierarchic and cyclic dependency structure of architecture and design level. These tools provide a huge amount of information and a large set of pain points that indicate high compile times and low testability of separate units of code or architecture modules. However, it is hard to decide which critical or painful issues are to be tackled in which sequence and how these issues are to be prioritized.
Additionally, bug reports and change requests may be captured by a bug tracking tool that provides information about functional features or operational qualities of a system that do not work as expected. These reports and requests are collected and prioritized, for example, according to the severity of the reported bugs.